qx.Class.define("mutual.formBeneficiario", {
			extend : qx.ui.groupbox.GroupBox,
			events : {
				"cancelar" : "qx.event.type.Event"
			},
			construct : function(tipoSeguro, idPersonaPlan, idBeneficiario) {
				this.base(arguments);
				this.setLayout(new qx.ui.layout.VBox(5));
				
				/* obtenemos los datos necesarios para realizar la edicion */
				var beneficiario = (idBeneficiario)? this.getBeneficiario(idBeneficiario) : null;
				
				/* definimos el filtro de beneficiarios */
				var grpFields = new qx.ui.groupbox.GroupBox();
				var filterBeneficiarios = new mutual.filterPersonas(10);
				
				/* obtenemos los campos segun el seguro recuperado */
				if (beneficiario){ 
					filterBeneficiarios.setPersona(parseInt(beneficiario.id_persona));
				}
				
				/* cargamos los controles de acuerdo al tipo de seguro*/
				this.getFields(tipoSeguro, grpFields, beneficiario);
				
				// agregamos el filtro 
				this.add(filterBeneficiarios);
				this.add(grpFields);
				
				
				/* cargamos los botones de actualizacion */
				var content = new qx.ui.container.Composite(new qx.ui.layout.HBox(4).set({alignX : "center"}))
				var btnAceptar = new qx.ui.form.Button("Guardar");
				btnAceptar.addListener("execute", function(){
					var idBeneficiario = (beneficiario) ? beneficiario.id_beneficiario : null;
					var idPersona = filterBeneficiarios.getSelectedEntity().value;
					this.persistBeneficiario(idBeneficiario, idPersona, idPersonaPlan);
				}, this);
				var btnCancelar = new qx.ui.form.Button("Cancelar");
				btnCancelar.addListener("execute", function() {
							this.fireEvent("cancelar");
							this.destroy();
						}, this);
				content.add(btnAceptar);
				content.add(btnCancelar);
				this.add(content);
			},

			members : {
				persistBeneficiario : null,
				
				lblParentesco : null,
				lblPorcentaje : null,
				
				ctrlParentesco : null,
				ctrlPorcentaje : null,
				ctrlEsBeneficiario : null,
				ctrlEsAsegurado : null,
				
				getParentesco : function(){
					return this.ctrlParentesco.getParentescoType();
				},
				getPorcentaje : function(){
					return (this.ctrlPorcentaje.getValue())? this.ctrlPorcentaje.getValue() : 0;
				},
				getEsBeneficiario : function(){
					return (this.ctrlEsBeneficiario.getValue())? this.ctrlEsBeneficiario.getValue() : "N"
				},
				getEsAsegurado : function(){
					return (this.ctrlEsAsegurado.getValue())? this.ctrlEsAsegurado.getValue() : "N"
				},
				
				setParentesco: function(parentesco){
					this.ctrlParentesco.setParentescoType(parentesco);
				},
				setPorcentaje : function(porcentaje){
					this.ctrlPorcentaje.getChildControl("textfield").setValue(porcentaje);					
				},
				setEsBeneficiario : function(esBeneficiario){
					this.ctrlEsBeneficiario.setValue(esBeneficiario);
				},
				setEsAsegurado : function(esAsegurado){
					this.ctrlEsAsegurado.setValue(esAsegurado);
				},
				
				getBeneficiario : function(idBeneficiario){
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Asignacion");
					var beneficiario = rpc.callSync("getBeneficiario", idBeneficiario);
					return beneficiario;
				},
				
				getFields : function(tipoSeguro, grpFields, beneficiario){
					grpFields.removeAll()
					grpFields.setLayout(new qx.ui.layout.VBox(5));
					
					this.lblParentesco = new qx.ui.basic.Label("Parentesco: "); 
					this.ctrlParentesco = new mutual.selectParentescos();
					this.lblPorcentaje = new qx.ui.basic.Label("Porcentaje: ");
					this.ctrlPorcentaje = new qx.ui.form.Spinner();
					this.ctrlEsBeneficiario = new mutual.options("Es Beneficiario: ", [{value: "S", label:"Si"}, {value: "N", label:"No"}]);
					this.ctrlEsAsegurado = new mutual.options("Tipo Persona: ", [{value: "S", label:"Asegurado"}, {value: "N", label:"Beneficiario"}]);
			
					tipoSeguro = parseInt(tipoSeguro);
					switch (tipoSeguro){
						case 1:
						case 3:
						case 5:
							grpFields.add(this.lblParentesco); grpFields.add(this.ctrlParentesco);
							if (beneficiario){
								this.setParentesco(beneficiario.parentesco);
							}
							break;
						case 2:
							grpFields.add(this.lblParentesco); grpFields.add(this.ctrlParentesco);
							grpFields.add(this.lblPorcentaje); grpFields.add(this.ctrlPorcentaje);
							grpFields.add(this.ctrlEsBeneficiario);
							if (beneficiario){
								this.setParentesco(beneficiario.parentesco);
								this.setPorcentaje(beneficiario.porcentaje);
								this.setEsBeneficiario(beneficiario.conyuge);
							}
							break;
						case 4:
							grpFields.add(this.lblParentesco); grpFields.add(this.ctrlParentesco);
							grpFields.add(this.lblPorcentaje); grpFields.add(this.ctrlPorcentaje);
							grpFields.add(this.ctrlEsAsegurado);
							if (beneficiario){
								this.setParentesco(beneficiario.parentesco);
								this.setPorcentaje(beneficiario.porcentaje);
								this.setEsAsegurado(beneficiario.asegurado);
							}
							break;
					}
					
					return grpFields;
				},
				
				persistBeneficiario : function(idBeneficiario, idPersona, idPersonaPlan){
					try{
						var nuevo = !(idBeneficiario);
						var beneficiario = {
							id_beneficiario : idBeneficiario,
							id_persona : idPersona, // sacar del filtro
							id_persona_plan : idPersonaPlan,
							parentesco : this.getParentesco(),
							porcentaje : this.getPorcentaje(),
							conyuge : this.getEsBeneficiario(),
							asegurado : this.getEsAsegurado()
						};
						if (!this.validate(beneficiario)){
							return;
						}
						var method = (nuevo) ? "insertBeneficiario" : "editBeneficiario";
						var rpc = new qx.io.remote.Rpc("services/","mutual.Asignacion");
						var response = rpc.callSync(method, beneficiario);
						
						this.persistSuccess();
						this.destroy();
					}catch(x){
						alert(x);
					}
				},
			
				validate : function(beneficiario){
					if (!beneficiario.id_persona || beneficiario.id_persona == 0){
						alert("Falta definir la Persona");
						return false;
					}else if(!beneficiario.id_persona_plan || beneficiario.id_persona_plan == 0){
						alert("Debe seleccionar un plan asignado a una persona");
						return false;
					}else if(!mutual.utilities.isDecimal(beneficiario.porcentaje)){
						alert("El porcentaje no tiene el formato correcto");
						this.ctrlPorcentaje.focus();
						return false;
					}else{
						return true;
					}
				}
			}
		});
